package org.jeecg.modules.power.device.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.app.v1.device.entity.ApiDeviceCategoryEntity;
import org.jeecg.modules.app.v1.device.entity.ApiDeviceEntity;
import org.jeecg.modules.app.v1.device.entity.ApiShopDeviceDetailEntity;
import org.jeecg.modules.app.v1.device.entity.ApiShopDeviceEntity;
import org.jeecg.modules.power.device.entity.YlDevice;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.power.group.entity.GroupUser;
import org.jeecg.modules.system.entity.SysUser;

import java.util.List;
import java.util.Map;

/**
 * @Description: 设备表（初稿）
 * @Author: jeecg-boot
 * @Date:   2024-07-16
 * @Version: V1.0
 */
public interface IYlDeviceService extends IService<YlDevice> {

    /**------------------------------------后台用--------------------------------------------------------*/
    /**
     * 查询设备列表
     * @param page
     * @param deviceMac
     * @param deviceCategory
     * @return
     */
    IPage<YlDevice> listAll(Page<YlDevice> page, String deviceMac,String deviceCategory);
    /**
     * 根据设备mac查询设备信息，包含当前所在的位置
     * @param deviceMac
     * @return
     */
    YlDevice getDeviceByMac(String deviceMac);

    /**------------------------------------后台用--------------------------------------------------------*/


    /**------------------------------------接口用--------------------------------------------------------*/
    /**
     * 资产一览_故障设备_下级数据
     *
     * 查询BD下的设备汇总  或者分组下的设备汇总
     * @param flag 1小组（groupId为所在小组ID）2组员（groupId为组员ID）
     * @param groupId
     */
    List<ApiDeviceCategoryEntity>  getFaultDeviceByCategory(String flag,String groupId);
    /**
     * 资产一览下级数据
     *
     * 查询BD下的设备汇总  或者分组下的设备汇总
     * @param flag 1小组（groupId为所在小组ID）2组员（groupId为组员ID）
     * @param groupId
     */
    List<ApiDeviceCategoryEntity>  getBelowDeviceByCategory(String flag,String groupId);
    /**
     * 查询BD下的设备汇总  或者分组下的设备汇总
     * @param flag 1小组（groupId为所在小组ID）2组员（groupId为组员ID）
     * @param groupId
     */
    List<ApiDeviceCategoryEntity>  getAllDeviceByCategory(String flag, String groupId);
    /**
     * 门店下设备列表
     * @param shopId
     * @return
     */
    List<ApiShopDeviceEntity>queryShopDevice(String shopId);
    /**
     * 门店下设备详情
     * @param deviceId
     * @return
     */
    ApiShopDeviceDetailEntity queryShopDeviceDetail(String deviceId);
    /**
     * 获取用户、小组信息
     * @param userId
     * @return
     */
    GroupUser getGroupUser(String userId);

    YlDevice getDeviceByNo(String deviceNo);

    /**
     * 锁定当前设备
     * @param id
     * @return
     */
    boolean lock(String id,String lockId);

    /**
     * 解锁设备
     * @param id
     * @param lockId
     * @return
     */
    boolean unlock(String id,String lockId);
    /**
     * bd门店下的设备
     * @param page
     * @param id bdId
     * @return
     */
    List<ApiDeviceEntity> shopDeviceList(Page<ApiDeviceEntity> page, String categoryId,String flag,String groupId);
    /**
     * bd下的设备
     * @param page
     * @param id bdId
     * @return
     */
    List<ApiDeviceEntity> bdDeviceList(Page<ApiDeviceEntity> page, String categoryId,String flag,String groupId);
    /**
     * 仓库设备
     * @param page
     * @return
     */
    List<ApiDeviceEntity> storeDeviceList(Page<ApiDeviceEntity> page,String categoryId);
    /**
     * 设备绑定门店
     * @param deviceId
     * @param shopId
     */
    void bindShop(String deviceId,String shopId);

    /**
     * 设备转移后绑定新的BD
     * @param deviceId
     * @param userId
     */
    void bindUser(String deviceId,String userId);
    /**
     * 设备转移后绑定新的BD
     * @param deviceId
     * @param userId
     */
    void bind(String deviceId,String userId,Integer type);
    /**
     * 运维操作
     * @param deviceId
     * @param deviceMac
     * @param type
     * @param hatch
     * @param bd
     */
    void operate(String deviceId, String deviceMac, Integer type, String hatch, String reason,SysUser bd);

    /**------------------------------------接口用--------------------------------------------------------*/


    Map<String, Object> getShopIdDeviceQuantity(String shopId);








}
